using System.Collections;
using System.Collections.Generic;
using Unity.Burst;
using Unity.Entities;
using UnityEngine;

[BurstCompile]  // 启用Burst编译，将C#代码编译为高性能原生代码
public partial struct MoveSystem : ISystem  // 部分结构，实现ISystem接口
{
    private EntityQuery _requiredQuery;
    [BurstCompile]
    public void OnCreate(ref SystemState state)  // 系统创建时调用一次
    {
        Debug.Log("MoveToTargetSystem 已创建和注册!");
        // 设置系统更新条件：只有存在MoveToTargetTag组件时系统才运行
        _requiredQuery = state.GetEntityQuery(
            ComponentType.ReadWrite<MoveDataTag>()
            );
        //state.RequireForUpdate(_requiredQuery);
    }

    [BurstCompile]
    public void OnUpdate(ref SystemState state)  // 每帧调用
    {
        if (_requiredQuery.IsEmpty)
        {
            //Debug.Log("没有找到匹配的实体");
            return;
        }
        //Debug.Log($"找到 {_requiredQuery.CalculateEntityCount()} 个匹配实体");
        // 获取上一帧到当前帧的时间间隔（秒）
        float deltaTime = SystemAPI.Time.DeltaTime;

        // 创建并调度并行作业
        new MoveJob  // 实例化作业结构体
        {
            DeltaTime = deltaTime  // 通过构造函数参数传递时间增量
        }.ScheduleParallel();  // 并行调度作业，自动利用多核CPU


    }
}
